package hbt.dao;

import hbt.HibernateUtil;

import java.util.List;

import negocio.Cliente;
import negocio.OrdenPedido;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import Enum.EEstadoEntidad;
import Enum.EEstadoOP;

public class ClienteDAO extends HibernateDao<Cliente> {
	protected static HibernateDao instancia = null;

	public static ClienteDAO getInstancia() {
		if (instancia == null) {
			instancia = new ClienteDAO();
			sf = HibernateUtil.getSessionFactory();
		}
		return (ClienteDAO) instancia;
	}

	public List<Cliente> buscarClientes(String nombreCliente, String cuitCliente) {
		Session session = sf.openSession();
		String queryString = "from Cliente c";
		if ((nombreCliente != null && !"".equalsIgnoreCase(nombreCliente))
				|| (cuitCliente != null && !"".equalsIgnoreCase(cuitCliente)))
			queryString += " where 1=1 ";
		if (nombreCliente != null && !"".equalsIgnoreCase(nombreCliente))
			queryString += " AND c.razonSocial LIKE :nombreCliente ";
		if (cuitCliente != null && !"".equalsIgnoreCase(cuitCliente))
			queryString += " AND c.cuit = :cuitCliente ";

		Query query = session.createQuery(queryString);

		if (nombreCliente != null && !"".equalsIgnoreCase(nombreCliente))
			query.setParameter("nombreCliente", "%" + nombreCliente + "%");
		if (cuitCliente != null && !"".equalsIgnoreCase(cuitCliente))
			query.setParameter("cuitCliente", cuitCliente);

		List<Cliente> clientes = query.list();
		return clientes;
	}

	public List<Cliente> findClientesActivos() {
		Session session = sf.openSession();
		String hql = "from " + Cliente.class.getName() + " c ";
		hql += " where c.estado = :estado";

		Query query = session.createQuery(hql);

		query.setParameter("estado", EEstadoEntidad.activo);
		List<Cliente> clientes = query.list();
		session.close();
		return clientes;
	}

}
